\section{Background of programmable networks}
In this section we present several contributions to programmable networks prior to SDN and OpenFlow. One of the first approaches was SOFTNET[], an experimental multihop packet radio network that introduced the idea of adding commands to the contents of each packet. The goal was to be able to modify a network node during operation time, using these commands written in SOFTNET language. The motivation of the authors to create this network was to enable experiments with different network protocols. SOFTNET was deployed as a proof of concept. There were no further large scale deployments, but the idea behind it was the motivation for Active Networks [ActiveNetworks1,ActiveNetworks2]. 

The main idea of Active Networks (AN) was to allow packets to contain programs that could be executed by the network devices that they traversed. The concept of active network was due to the fact that switches perform computations on the data of the packets flowing through them and the users can inject programs into the network [ActiveNetworks1]. A survey in of AN research is available in [ActiveNetwork3]. Although AN became an active field of research, it ultimately failed at being widely used. Recently, NetServ[NetServ] was proposed as ActiveNetworks 2.0 [Website]. The authors argue that NetServ contains all the necessary elements to be deployed.

The approaches that we have mentioned have one thing in common: they are motivated by the lack of programmability of network devices and they propose new ways to perform experiments in networks. The latest approach to overcome this problem is SDN. There are at least two proposals that aim at standardizing the communication between the control element and the data element. IETF created Forwarding and Control Element Separation (ForCES) [ForCES]. To the best of our knowledge, ForCES was the first protocol that proposed a standardization to communicate the controller and the network devices.

OpenFlow came next and was based on the same motivation: how to define a standard way to communicate the control plane and the data plane. OpenFlow quickly became an active research topic. However, ForCES did not. For this reason, we will focus this survey on OpenFlow based networks.
